ποΈGitΠ―ΡΠ°ποΈ
Node / meshtastic / Meshtastic-Android / files / androidApp / src / google / kotlin / org / meshtastic / app / ai / GeminiNanoDocAssistant.kt
Displaying Raw β’ Download
androidApp/src/google/kotlin/org/meshtastic/app/ai/GeminiNanoDocAssistant.kt 034005b4fa5c8b34761c4ed5d85f0d3ebd4345d8 (034005b4) Text, 28.73 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.app.ai
Tff7b72import T7ee787co.touchlab.kermit.Logger
Tff7b72import T7ee787com.google.firebase.Firebase
Tff7b72import T7ee787com.google.firebase.ai.DownloadStatus
Tff7b72import T7ee787com.google.firebase.ai.InferenceMode
Tff7b72import T7ee787com.google.firebase.ai.OnDeviceConfig
Tff7b72import T7ee787com.google.firebase.ai.OnDeviceModelOption
Tff7b72import T7ee787com.google.firebase.ai.OnDeviceModelStatus
Tff7b72import T7ee787com.google.firebase.ai.ai
Tff7b72import T7ee787com.google.firebase.ai.type.GenerativeBackend
Tff7b72import T7ee787com.google.firebase.ai.type.PublicPreviewAPI
Tff7b72import T7ee787com.google.firebase.ai.type.content
Tff7b72import T7ee787kotlinx.coroutines.delay
Tff7b72import T7ee787kotlinx.coroutines.flow.Flow
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.StateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.asStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.first
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRepository
Tff7b72import T7ee787org.meshtastic.feature.docs.ai.AIDocAssistant
Tff7b72import T7ee787org.meshtastic.feature.docs.data.DocBundleLoader
Tff7b72import T7ee787org.meshtastic.feature.docs.data.KeywordSearchEngine
Tff7b72import T7ee787org.meshtastic.feature.docs.model.AIDocAssistantResult
Tff7b72import T7ee787org.meshtastic.feature.docs.model.DocPage
Tff7b72import T7ee787org.meshtastic.feature.docs.model.DocsAiError
Tff7b72import T7ee787org.meshtastic.feature.docs.model.ModelReadiness
T8b949e/**
* Gemini on-device AI assistant for the Google flavor.
*
* Runs entirely on-device using the Firebase AI Logic SDK with [InferenceMode.ONLY_ON_DEVICE].
*
* Context strategy: extracts only the **most relevant paragraphs** from each page (those containing query terms),
* strips markdown formatting to maximize information density, and fits within the on-device token budget.
*
* Multi-turn history is supported locally by formatting the past conversation turns directly into the prompt.
*
* @see <a href="https://firebase.google.com/docs/ai-logic/hybrid/android/get-started">Firebase AI Logic Hybrid</a>
*/
Tf0883e@OptInTb4b4b4(Te6edf3PublicPreviewAPITff7b72::Te6edf3classTb4b4b4)
Tff7b72class T56d364GeminiNanoDocAssistantTb4b4b4(
Tff7b72private Tff7b72val Te6edf3searchEngineTb4b4b4: Te6edf3KeywordSearchEngineTb4b4b4,
Tff7b72private Tff7b72val Te6edf3bundleLoaderTb4b4b4: Te6edf3DocBundleLoaderTb4b4b4,
Tff7b72private Tff7b72val Te6edf3nodeRepositoryTb4b4b4: Te6edf3NodeRepositoryTb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3AIDocAssistant Tb4b4b4{
T8b949e/** On-device model for fast, local answers grounded in bundled docs. */
Tff7b72private Tff7b72val Te6edf3onDeviceModel Tff7b72by Te6edf3lazy Tb4b4b4{
Te6edf3FirebaseTb4b4b4.Te6edf3aiTb4b4b4(Te6edf3backend Tff7b72= Te6edf3GenerativeBackendTb4b4b4.Te6edf3googleAITb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3generativeModelTb4b4b4(
Te6edf3modelName Tff7b72= Te6edf3MODEL_NAMETb4b4b4,
Te6edf3systemInstruction Tff7b72= Te6edf3content Tb4b4b4{ Te6edf3textTb4b4b4(Te6edf3SYSTEM_INSTRUCTIONTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onDeviceConfig Tff7b72=
Te6edf3OnDeviceConfigTb4b4b4(
Te6edf3mode Tff7b72= Te6edf3InferenceModeTb4b4b4.Te6edf3ONLY_ON_DEVICETb4b4b4,
Te6edf3modelOption Tff7b72= Te6edf3OnDeviceModelOptionTb4b4b4.Te6edf3STABLETb4b4b4,
Te6edf3maxOutputTokens Tff7b72= Te6edf3MAX_OUTPUT_TOKENSTb4b4b4,
Te6edf3temperature Tff7b72= Te6edf3TEMPERATURETb4b4b4,
Te6edf3topK Tff7b72= Te6edf3TOP_KTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72val Te6edf3_modelStatus Tff7b72= Te6edf3MutableStateFlowTff7b72<Te6edf3ModelReadinessTff7b72>Tb4b4b4(Te6edf3ModelReadinessTb4b4b4.Te6edf3CheckingTb4b4b4)
T8b949e/** Exposes model download/readiness state for UI consumption. */
Tff7b72override Tff7b72val Te6edf3modelStatusTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ModelReadinessTff7b72> Tff7b72= Te6edf3_modelStatusTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
T8b949e/** Conversation history stored as list of (Question, Answer) pairs. */
Tff7b72private Tff7b72val Te6edf3history Tff7b72= Te6edf3mutableListOfTff7b72<Te6edf3PairTff7b72<Tffa657StringTb4b4b4, Tffa657StringTff7b72>Tff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffisSupportedTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3ext Tff7b72= Te6edf3onDeviceModelTb4b4b4.Te6edf3onDeviceExtension
Tff7b72if Tb4b4b4(Te6edf3ext Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72= Te6edf3ModelReadinessTb4b4b4.Te6edf3UnavailableTb4b4b4(Ta5d6ff"Ta5d6ffOn-device extension not availableTa5d6ff"Tb4b4b4)
Tff7b72return Tff7b72false
Tb4b4b4}
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72= Te6edf3ModelReadinessTb4b4b4.Te6edf3Checking
Tff7b72val Te6edf3status Tff7b72= Te6edf3extTb4b4b4.Te6edf3checkStatusTb4b4b4(Tb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffOn-device model status: Tffd700$Te6edf3statusTa5d6ff" Tb4b4b4}
Tff7b72when Tb4b4b4(Te6edf3statusTb4b4b4) Tb4b4b4{
Te6edf3OnDeviceModelStatusTb4b4b4.Te6edf3AVAILABLE Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3warmUpTb4b4b4(Te6edf3extTb4b4b4)
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72= Te6edf3ModelReadinessTb4b4b4.Te6edf3Available
Tff7b72true
Tb4b4b4}
Te6edf3OnDeviceModelStatusTb4b4b4.Te6edf3DOWNLOADING Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72= Te6edf3ModelReadinessTb4b4b4.Te6edf3DownloadingTb4b4b4(Te6edf3bytesDownloaded Tff7b72= T79c0ff0LTb4b4b4, Te6edf3totalBytes Tff7b72= T79c0ff0LTb4b4b4)
Tff7b72false
Tb4b4b4}
Te6edf3OnDeviceModelStatusTb4b4b4.Te6edf3DOWNLOADABLE Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3iTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffModel downloadable β requesting downloadTa5d6ff" Tb4b4b4}
Tff7b72var Te6edf3downloadCompleted Tff7b72= Tff7b72false
Tff7b72var Te6edf3totalSize Tff7b72= T79c0ff0L
Te6edf3extTb4b4b4.Te6edf3downloadTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3collect Tb4b4b4{ Te6edf3downloadStatus Tff7b72-Tff7b72>
Tff7b72when Tb4b4b4(Te6edf3downloadStatusTb4b4b4) Tb4b4b4{
Tff7b72is Te6edf3DownloadStatusTb4b4b4.Te6edf3DownloadStarted Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3totalSize Tff7b72= Te6edf3downloadStatusTb4b4b4.Te6edf3bytesToDownload
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72= Te6edf3ModelReadinessTb4b4b4.Te6edf3DownloadingTb4b4b4(T79c0ff0LTb4b4b4, Te6edf3totalSizeTb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffDownload started: Tffd700$Te6edf3totalSizeTa5d6ff bytesTa5d6ff" Tb4b4b4}
Tb4b4b4}
Tff7b72is Te6edf3DownloadStatusTb4b4b4.Te6edf3DownloadInProgress Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72=
Te6edf3ModelReadinessTb4b4b4.Te6edf3DownloadingTb4b4b4(Te6edf3downloadStatusTb4b4b4.Te6edf3totalBytesDownloadedTb4b4b4, Te6edf3totalSizeTb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffDownload progress: Tffd700${Te6edf3downloadStatusTb4b4b4.Te6edf3totalBytesDownloadedTffd700}Ta5d6ff/Tffd700$Te6edf3totalSizeTa5d6ff"
Tb4b4b4}
Tb4b4b4}
Tff7b72is Te6edf3DownloadStatusTb4b4b4.Te6edf3DownloadCompleted Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3iTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffModel download completedTa5d6ff" Tb4b4b4}
Te6edf3warmUpTb4b4b4(Te6edf3extTb4b4b4)
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72= Te6edf3ModelReadinessTb4b4b4.Te6edf3Available
Te6edf3downloadCompleted Tff7b72= Tff7b72true
Tb4b4b4}
Tff7b72is Te6edf3DownloadStatusTb4b4b4.Te6edf3DownloadFailed Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72= Te6edf3ModelReadinessTb4b4b4.Te6edf3UnavailableTb4b4b4(Ta5d6ff"Ta5d6ffDownload failedTa5d6ff"Tb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffModel download failed: Tffd700$Te6edf3downloadStatusTa5d6ff" Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3downloadCompleted
Tb4b4b4}
Tff7b72else Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72= Te6edf3ModelReadinessTb4b4b4.Te6edf3UnavailableTb4b4b4(Ta5d6ff"Ta5d6ffModel unavailable on this deviceTa5d6ff"Tb4b4b4)
Tff7b72false
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3e Tff7b72is Te6edf3kotlinxTb4b4b4.Te6edf3coroutinesTb4b4b4.Te6edf3CancellationExceptionTb4b4b4) Tff7b72throw Te6edf3e
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffisSupported() check failed: Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Te6edf3_modelStatusTb4b4b4.Te6edf3value Tff7b72= Te6edf3ModelReadinessTb4b4b4.Te6edf3UnavailableTb4b4b4(Te6edf3eTb4b4b4.Te6edf3messageTb4b4b4)
Tff7b72false
Tb4b4b4}
Tff7b72private Tff7b72suspend Tff7b72fun Td2a8ffwarmUpTb4b4b4(Te6edf3extTb4b4b4: Te6edf3comTb4b4b4.Te6edf3googleTb4b4b4.Te6edf3firebaseTb4b4b4.Te6edf3aiTb4b4b4.Te6edf3OnDeviceExtensionTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3extTb4b4b4.Te6edf3warmUpTb4b4b4(Tb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3iTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffModel warmed up successfullyTa5d6ff" Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3e Tff7b72is Te6edf3kotlinxTb4b4b4.Te6edf3coroutinesTb4b4b4.Te6edf3CancellationExceptionTb4b4b4) Tff7b72throw Te6edf3e
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffWarmup failed (non-fatal): Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72override Tff7b72suspend Tff7b72fun Td2a8ffanswerTb4b4b4(Te6edf3questionTb4b4b4: Tffa657StringTb4b4b4, Te6edf3currentPageIdTb4b4b4: Tffa657String?Tb4b4b4)Tb4b4b4: Te6edf3AIDocAssistantResult Tff7b72=
Te6edf3answerStreamTb4b4b4(Te6edf3questionTb4b4b4, Te6edf3currentPageIdTb4b4b4)Tb4b4b4.Te6edf3first Tb4b4b4{ Tffa657it Tff7b72!is Te6edf3AIDocAssistantResultTb4b4b4.Te6edf3Partial Tb4b4b4}
Tff7b72override Tff7b72fun Td2a8ffanswerStreamTb4b4b4(
Te6edf3questionTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3currentPageIdTb4b4b4: Tffa657String?Tb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3kotlinxTb4b4b4.Te6edf3coroutinesTb4b4b4.Te6edf3flowTb4b4b4.Te6edf3FlowTff7b72<Te6edf3AIDocAssistantResultTff7b72> Tff7b72= Te6edf3kotlinxTb4b4b4.Te6edf3coroutinesTb4b4b4.Te6edf3flowTb4b4b4.Te6edf3flow Tb4b4b4{
T8b949e// Fast path: short prompts with no page context skip expensive doc loading.
Tff7b72val Te6edf3isLightweight Tff7b72=
Te6edf3questionTb4b4b4.Te6edf3length Tff7b72< Te6edf3MAX_LIGHTWEIGHT_PROMPT_LEN Tff7b72&Tff7b72& Te6edf3currentPageId Tff7b72=Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3historyTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3promptTb4b4b4: Tffa657String
Tff7b72val Te6edf3contextPagesTb4b4b4: Te6edf3ListTff7b72<Te6edf3DocPageTff7b72>
Tff7b72if Tb4b4b4(Te6edf3isLightweightTb4b4b4) Tb4b4b4{
Te6edf3prompt Tff7b72= Ta5d6ff"Ta5d6ffYou are Chirpy, the Meshtastic mesh networking assistant mascot. Tffd700$Te6edf3questionTa5d6ff"
Te6edf3contextPages Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffLightweight prompt (no context): Tffd700${Te6edf3questionTb4b4b4.Te6edf3lengthTffd700}Ta5d6ff charsTa5d6ff" Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72val Te6edf3bundle Tff7b72= Te6edf3bundleLoaderTb4b4b4.Te6edf3loadTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3queryTerms Tff7b72= Te6edf3extractQueryTermsTb4b4b4(Te6edf3questionTb4b4b4)
T8b949e// Load all page content for full-text search ranking.
Tff7b72val Te6edf3allContent Tff7b72=
Te6edf3bundleTb4b4b4.Te6edf3pagesTb4b4b4.Te6edf3associateWith Tb4b4b4{ Te6edf3page Tff7b72-Tff7b72> Te6edf3bundleLoaderTb4b4b4.Te6edf3readPageTb4b4b4(Te6edf3pageTb4b4b4.Te6edf3idTb4b4b4)Tff7b72?.Te6edf3markdownTb4b4b4.Te6edf3orEmptyTb4b4b4(Tb4b4b4) Tb4b4b4}
T8b949e// Rank pages by relevance: full-text content search + keyword/title matching.
Tff7b72val Te6edf3rankedPages Tff7b72= Te6edf3rankPagesByRelevanceTb4b4b4(Te6edf3queryTermsTb4b4b4, Te6edf3bundleTb4b4b4.Te6edf3pagesTb4b4b4, Te6edf3allContentTb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffRanked pages: Tffd700${Te6edf3rankedPagesTb4b4b4.Te6edf3takeTb4b4b4(T79c0ff5Tb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Ta5d6ff"Tffd700${Tffa657itTb4b4b4.Te6edf3firstTb4b4b4.Te6edf3idTffd700}Ta5d6ff(Tffd700${Tffa657itTb4b4b4.Te6edf3secondTffd700}Ta5d6ff)Ta5d6ff" Tb4b4b4}Tffd700}Ta5d6ff" Tb4b4b4}
T8b949e// Build compact context by extracting only relevant paragraphs.
Tff7b72val Te6edf3contextResult Tff7b72= Te6edf3buildContextTb4b4b4(Te6edf3currentPageIdTb4b4b4, Te6edf3queryTermsTb4b4b4, Te6edf3rankedPagesTb4b4b4, Te6edf3allContentTb4b4b4, Te6edf3MAX_CONTEXT_CHARSTb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffContext: Tffd700${Te6edf3contextResultTb4b4b4.Te6edf3partsTb4b4b4.Te6edf3sizeTffd700}Ta5d6ff pages, Tffd700${Te6edf3contextResultTb4b4b4.Te6edf3totalCharsTffd700}Ta5d6ff chars (budget Tffd700$Te6edf3MAX_CONTEXT_CHARSTa5d6ff)Ta5d6ff"
Tb4b4b4}
Te6edf3prompt Tff7b72= Te6edf3buildPromptTb4b4b4(Te6edf3questionTb4b4b4, Te6edf3contextResultTb4b4b4.Te6edf3partsTb4b4b4)
Te6edf3contextPages Tff7b72= Te6edf3contextResultTb4b4b4.Te6edf3usedPageIdsTb4b4b4.Te6edf3mapNotNull Tb4b4b4{ Te6edf3id Tff7b72-Tff7b72> Te6edf3bundleTb4b4b4.Te6edf3pagesTb4b4b4.Te6edf3find Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3id Tff7b72=Tff7b72= Te6edf3id Tb4b4b4} Tb4b4b4}
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffPrompt: Tffd700${Te6edf3promptTb4b4b4.Te6edf3lengthTffd700}Ta5d6ff chars, history count: Tffd700${Te6edf3historyTb4b4b4.Te6edf3sizeTffd700}Ta5d6ff" Tb4b4b4}
Tb4b4b4}
Tff7b72var Te6edf3lastErrorTb4b4b4: Te6edf3Exception? Tff7b72= Tff7b72null
Tff7b72for Tb4b4b4(Te6edf3attempt Tff7b72in T79c0ff0.Tb4b4b4.Te6edf3MAX_RETRIESTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3attempt Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3backoffMs Tff7b72= Te6edf3INITIAL_BACKOFF_MS Tff7b72* Tb4b4b4(T79c0ff1L Te6edf3shl Tb4b4b4(Te6edf3attempt Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3iTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffRetrying inference in Tffd700${Te6edf3backoffMsTffd700}Ta5d6ffms (attempt Tffd700${Te6edf3attempt Tff7b72+ T79c0ff1Tffd700}Ta5d6ff/Tffd700${Te6edf3MAX_RETRIES Tff7b72+ T79c0ff1Tffd700}Ta5d6ff)Ta5d6ff"
Tb4b4b4}
Te6edf3delayTb4b4b4(Te6edf3backoffMsTb4b4b4)
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3accumulatedText Tff7b72= Te6edf3StringBuilderTb4b4b4(Tb4b4b4)
Tff7b72var Te6edf3lastEmitTime Tff7b72= T79c0ff0L
Te6edf3onDeviceModelTb4b4b4.Te6edf3generateContentStreamTb4b4b4(Te6edf3promptTb4b4b4)Tb4b4b4.Te6edf3collect Tb4b4b4{ Te6edf3chunk Tff7b72-Tff7b72>
Tff7b72val Te6edf3text Tff7b72= Te6edf3chunkTb4b4b4.Te6edf3text
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3textTb4b4b4.Te6edf3isNullOrEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3accumulatedTextTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3textTb4b4b4)
Tff7b72val Te6edf3now Tff7b72= Te6edf3SystemTb4b4b4.Te6edf3nanoTimeTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3elapsedMs Tff7b72= Tb4b4b4(Te6edf3now Tff7b72- Te6edf3lastEmitTimeTb4b4b4) Tff7b72/ T79c0ff1Te6edf3_000_000
Tff7b72if Tb4b4b4(Te6edf3elapsedMs Tff7b72>Tff7b72= Te6edf3STREAM_THROTTLE_MSTb4b4b4) Tb4b4b4{
Te6edf3lastEmitTime Tff7b72= Te6edf3now
Te6edf3emitTb4b4b4(
Te6edf3AIDocAssistantResultTb4b4b4.Te6edf3PartialTb4b4b4(
Te6edf3answer Tff7b72= Te6edf3cleanResponseTb4b4b4(Te6edf3accumulatedTextTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3sourcePages Tff7b72= Te6edf3contextPagesTb4b4b4,
Te6edf3usedOnDeviceModel Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// Log token usage from last chunk
Te6edf3chunkTb4b4b4.Te6edf3usageMetadataTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3meta Tff7b72-Tff7b72>
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffTokens β prompt: Tffd700${Te6edf3metaTb4b4b4.Te6edf3promptTokenCountTffd700}Ta5d6ff, response: Tffd700${Te6edf3metaTb4b4b4.Te6edf3candidatesTokenCountTffd700}Ta5d6ff, total: Tffd700${Te6edf3metaTb4b4b4.Te6edf3totalTokenCountTffd700}Ta5d6ff"
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// Emit final partial to ensure UI has the complete text before Success
Te6edf3emitTb4b4b4(
Te6edf3AIDocAssistantResultTb4b4b4.Te6edf3PartialTb4b4b4(
Te6edf3answer Tff7b72= Te6edf3cleanResponseTb4b4b4(Te6edf3accumulatedTextTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3sourcePages Tff7b72= Te6edf3contextPagesTb4b4b4,
Te6edf3usedOnDeviceModel Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3onDeviceAnswer Tff7b72= Te6edf3cleanResponseTb4b4b4(Te6edf3accumulatedTextTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimEndTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3allSourcePages Tff7b72= Te6edf3contextPages
T8b949e// Keep short history because on-device inference has a smaller request token budget.
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isLightweightTb4b4b4) Tb4b4b4{
Te6edf3historyTb4b4b4.Te6edf3addTb4b4b4(Te6edf3questionTb4b4b4.Te6edf3takeTb4b4b4(Te6edf3MAX_HISTORY_CHARSTb4b4b4) Te6edf3to Te6edf3onDeviceAnswerTb4b4b4.Te6edf3takeTb4b4b4(Te6edf3MAX_HISTORY_CHARSTb4b4b4)Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3historyTb4b4b4.Te6edf3size Tff7b72> Te6edf3MAX_HISTORY_TURNSTb4b4b4) Tb4b4b4{
Te6edf3historyTb4b4b4.Te6edf3removeAtTb4b4b4(T79c0ff0Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3emitTb4b4b4(
Te6edf3AIDocAssistantResultTb4b4b4.Te6edf3SuccessTb4b4b4(
Te6edf3answer Tff7b72= Te6edf3onDeviceAnswerTb4b4b4,
Te6edf3sourcePages Tff7b72= Te6edf3allSourcePagesTb4b4b4,
Te6edf3usedOnDeviceModel Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72returnTf0883e@flow T8b949e// Success β exit retry loop
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3e Tff7b72is Te6edf3kotlinxTb4b4b4.Te6edf3coroutinesTb4b4b4.Te6edf3CancellationExceptionTb4b4b4) Tff7b72throw Te6edf3e
Te6edf3lastError Tff7b72= Te6edf3e
Tff7b72val Te6edf3isBusy Tff7b72=
Te6edf3eTb4b4b4.Te6edf3messageTff7b72?.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffBUSYTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tff7b72|Tff7b72|
Te6edf3eTb4b4b4.Te6edf3messageTff7b72?.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffBATTERYTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tff7b72|Tff7b72|
Te6edf3eTb4b4b4.Te6edf3messageTff7b72?.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffBACKGROUNDTa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72true
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isBusy Tff7b72|Tff7b72| Te6edf3attempt Tff7b72>Tff7b72= Te6edf3MAX_RETRIESTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3wTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffOn-device inference failed: Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Tff7b72val Te6edf3errorType Tff7b72=
Tff7b72when Tb4b4b4{
Te6edf3isBusy Tff7b72-Tff7b72> Te6edf3DocsAiErrorTb4b4b4.Te6edf3Busy
Te6edf3eTb4b4b4.Te6edf3messageTff7b72?.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffUNAVAILABLETa5d6ff"Tb4b4b4, Te6edf3ignoreCase Tff7b72= Tff7b72trueTb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tff7b72-Tff7b72>
Te6edf3DocsAiErrorTb4b4b4.Te6edf3ModelUnavailable
Tff7b72else Tff7b72-Tff7b72> Te6edf3DocsAiErrorTb4b4b4.Te6edf3Unknown
Tb4b4b4}
Tff7b72val Te6edf3fallbackPages Tff7b72= Te6edf3searchEngineTb4b4b4.Te6edf3selectForTokenBudgetTb4b4b4(Te6edf3questionTb4b4b4, Te6edf3maxChars Tff7b72= Te6edf3MAX_CONTEXT_CHARSTb4b4b4)
Te6edf3emitTb4b4b4(Te6edf3AIDocAssistantResultTb4b4b4.Te6edf3ErrorTb4b4b4(Te6edf3reason Tff7b72= Te6edf3errorTypeTb4b4b4, Te6edf3suggestedPages Tff7b72= Te6edf3fallbackPagesTb4b4b4)Tb4b4b4)
Tff7b72returnTf0883e@flow
Tb4b4b4}
Te6edf3LoggerTb4b4b4.Te6edf3iTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffBUSY error, will retry (attempt Tffd700${Te6edf3attempt Tff7b72+ T79c0ff1Tffd700}Ta5d6ff)Ta5d6ff" Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72override Tff7b72fun Td2a8ffresetSessionTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3historyTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)
Te6edf3LoggerTb4b4b4.Te6edf3dTb4b4b4(Te6edf3tag Tff7b72= Te6edf3TAGTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffChat session resetTa5d6ff" Tb4b4b4}
Tb4b4b4}
T8b949e/** Cleans on-device model response artifacts (markdown fences, excessive newlines). */
Tff7b72private Tff7b72fun Td2a8ffcleanResponseTb4b4b4(Te6edf3textTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Te6edf3text
Tb4b4b4.Te6edf3removePrefixTb4b4b4(Ta5d6ff"Ta5d6ff```markdownTa5d6ff\Ta5d6ffnTa5d6ff"Tb4b4b4)
Tb4b4b4.Te6edf3removePrefixTb4b4b4(Ta5d6ff"Ta5d6ff```Ta5d6ff\Ta5d6ffnTa5d6ff"Tb4b4b4)
Tb4b4b4.Te6edf3removeSuffixTb4b4b4(Ta5d6ff"Ta5d6ff\Ta5d6ffn```Ta5d6ff"Tb4b4b4)
Tb4b4b4.Te6edf3removeSuffixTb4b4b4(Ta5d6ff"Ta5d6ff```Ta5d6ff"Tb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff\Ta5d6ffn{3,}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnTa5d6ff"Tb4b4b4)
Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72data Tff7b72class T56d364ContextResultTb4b4b4(Tff7b72val Te6edf3partsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4, Tff7b72val Te6edf3usedPageIdsTb4b4b4: Te6edf3SetTff7b72<Tffa657StringTff7b72>Tb4b4b4, Tff7b72val Te6edf3totalCharsTb4b4b4: Tffa657IntTb4b4b4)
T8b949e/** Builds context parts from ranked pages within the given char budget. */
Tff7b72private Tff7b72fun Td2a8ffbuildContextTb4b4b4(
Te6edf3currentPageIdTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3queryTermsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4,
Te6edf3rankedPagesTb4b4b4: Te6edf3ListTff7b72<Te6edf3PairTff7b72<Te6edf3DocPageTb4b4b4, Tffa657IntTff7b72>Tff7b72>Tb4b4b4,
Te6edf3allContentTb4b4b4: Te6edf3MapTff7b72<Te6edf3DocPageTb4b4b4, Tffa657StringTff7b72>Tb4b4b4,
Te6edf3budgetTb4b4b4: Tffa657IntTb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3ContextResult Tb4b4b4{
Tff7b72val Te6edf3usedPageIds Tff7b72= Te6edf3mutableSetOfTff7b72<Tffa657StringTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3contextParts Tff7b72= Te6edf3mutableListOfTff7b72<Tffa657StringTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72var Te6edf3totalChars Tff7b72= T79c0ff0
T8b949e// Current page gets priority.
Tff7b72if Tb4b4b4(Te6edf3currentPageId Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3content Tff7b72= Te6edf3allContentTb4b4b4.Te6edf3entriesTb4b4b4.Te6edf3find Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3keyTb4b4b4.Te6edf3id Tff7b72=Tff7b72= Te6edf3currentPageId Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3content Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3contentTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3pageBudget Tff7b72= Te6edf3MAX_PAGE_CHARSTb4b4b4.Te6edf3coerceAtMostTb4b4b4(Te6edf3budgetTb4b4b4)
Tff7b72val Te6edf3extracted Tff7b72= Te6edf3extractRelevantContentTb4b4b4(Te6edf3contentTb4b4b4.Te6edf3keyTb4b4b4.Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4.Te6edf3valueTb4b4b4, Te6edf3queryTermsTb4b4b4, Te6edf3pageBudgetTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3extractedTb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3contextPartsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3extractedTb4b4b4)
Te6edf3totalChars Tff7b72+Tff7b72= Te6edf3extractedTb4b4b4.Te6edf3length
Te6edf3usedPageIdsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3currentPageIdTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// Add relevant paragraphs from top-ranked pages within budget.
Tff7b72for Tb4b4b4(Tb4b4b4(Te6edf3pageTb4b4b4, Te6edf3_Tb4b4b4) Tff7b72in Te6edf3rankedPagesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pageTb4b4b4.Te6edf3id Tff7b72in Te6edf3usedPageIdsTb4b4b4) Tff7b72continue
Tff7b72if Tb4b4b4(Te6edf3totalChars Tff7b72>Tff7b72= Te6edf3budgetTb4b4b4) Tff7b72break
Tff7b72val Te6edf3pageContent Tff7b72= Te6edf3allContentTff7b72[Te6edf3pageTff7b72] Tff7b72?: Tff7b72continue
Tff7b72if Tb4b4b4(Te6edf3pageContentTb4b4b4.Te6edf3isBlankTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72continue
Tff7b72val Te6edf3snippetBudget Tff7b72= Tb4b4b4(Te6edf3budget Tff7b72- Te6edf3totalCharsTb4b4b4)Tb4b4b4.Te6edf3coerceAtMostTb4b4b4(Te6edf3MAX_SNIPPET_CHARSTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3snippetBudget Tff7b72< Te6edf3MIN_USEFUL_SNIPPETTb4b4b4) Tff7b72break
Tff7b72val Te6edf3extracted Tff7b72= Te6edf3extractRelevantContentTb4b4b4(Te6edf3pageTb4b4b4.Te6edf3titleTb4b4b4, Te6edf3pageContentTb4b4b4, Te6edf3queryTermsTb4b4b4, Te6edf3snippetBudgetTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3extractedTb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3contextPartsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3extractedTb4b4b4)
Te6edf3totalChars Tff7b72+Tff7b72= Te6edf3extractedTb4b4b4.Te6edf3length
Te6edf3usedPageIdsTb4b4b4.Te6edf3addTb4b4b4(Te6edf3pageTb4b4b4.Te6edf3idTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3ContextResultTb4b4b4(Te6edf3parts Tff7b72= Te6edf3contextPartsTb4b4b4, Te6edf3usedPageIds Tff7b72= Te6edf3usedPageIdsTb4b4b4, Te6edf3totalChars Tff7b72= Te6edf3totalCharsTb4b4b4)
Tb4b4b4}
T8b949e/** Extracts query terms from a question, filtering short/stop words. */
Tff7b72private Tff7b72fun Td2a8ffextractQueryTermsTb4b4b4(Te6edf3questionTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72> Tff7b72= Te6edf3question
Tb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff[^Ta5d6ff\\Ta5d6ffp{L}Ta5d6ff\\Ta5d6ffp{N}Ta5d6ff\\Ta5d6ffs-]Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)
Tb4b4b4.Te6edf3splitTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff\\Ta5d6ffs+Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3length Tff7b72>Tff7b72= T79c0ff2 Tff7b72&Tff7b72& Tffa657it Tff7b72!in Te6edf3STOP_WORDS Tb4b4b4}
Tb4b4b4.Te6edf3distinctTb4b4b4(Tb4b4b4)
T8b949e/**
* Extracts the most relevant content from a page: the paragraphs that contain query terms, with markdown formatting
* stripped for maximum information density.
*/
Tff7b72private Tff7b72fun Td2a8ffextractRelevantContentTb4b4b4(
Te6edf3titleTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3markdownTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3queryTermsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4,
Te6edf3maxCharsTb4b4b4: Tffa657IntTb4b4b4,
Tb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3plainText Tff7b72= Te6edf3stripMarkdownTb4b4b4(Te6edf3markdownTb4b4b4)
T8b949e// Split into paragraphs (double newline or section breaks).
Tff7b72val Te6edf3paragraphs Tff7b72= Te6edf3plainTextTb4b4b4.Te6edf3splitTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff\Ta5d6ffn{2,}Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3length Tff7b72>Tff7b72= Te6edf3MIN_PARAGRAPH_LEN Tb4b4b4}
T8b949e// Score each paragraph by how many query terms it contains.
Tff7b72val Te6edf3scored Tff7b72=
Te6edf3paragraphsTb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3paragraph Tff7b72-Tff7b72>
Tff7b72val Te6edf3lower Tff7b72= Te6edf3paragraphTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3hits Tff7b72= Te6edf3queryTermsTb4b4b4.Te6edf3count Tb4b4b4{ Te6edf3term Tff7b72-Tff7b72> Te6edf3lowerTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4) Tb4b4b4}
Te6edf3paragraph Te6edf3to Te6edf3hits
Tb4b4b4}
T8b949e// Take paragraphs with hits first (sorted by hits desc), then fill with top paragraphs for context.
Tff7b72val Te6edf3withHits Tff7b72= Te6edf3scoredTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tff7b72> T79c0ff0 Tb4b4b4}Tb4b4b4.Te6edf3sortedByDescending Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tb4b4b4}
Tff7b72val Te6edf3withoutHits Tff7b72= Te6edf3scoredTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tff7b72=Tff7b72= T79c0ff0 Tb4b4b4}
Tff7b72val Te6edf3result Tff7b72= Te6edf3StringBuilderTb4b4b4(Ta5d6ff"Tffd700$Te6edf3titleTa5d6ff: Ta5d6ff"Tb4b4b4)
Tff7b72for Tb4b4b4(Tb4b4b4(Te6edf3paragraphTb4b4b4, Te6edf3_Tb4b4b4) Tff7b72in Te6edf3withHits Tff7b72+ Te6edf3withoutHitsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3resultTb4b4b4.Te6edf3length Tff7b72+ Te6edf3paragraphTb4b4b4.Te6edf3length Tff7b72+ T79c0ff1 Tff7b72> Te6edf3maxCharsTb4b4b4) Tb4b4b4{
T8b949e// Try to fit a truncated version if we have room.
Tff7b72val Te6edf3remaining Tff7b72= Te6edf3maxChars Tff7b72- Te6edf3resultTb4b4b4.Te6edf3length Tff7b72- T79c0ff1
Tff7b72if Tb4b4b4(Te6edf3remaining Tff7b72> Te6edf3MIN_USEFUL_SNIPPETTb4b4b4) Tb4b4b4{
Te6edf3resultTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3paragraphTb4b4b4.Te6edf3takeTb4b4b4(Te6edf3remainingTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tff7b72break
Tb4b4b4}
Te6edf3resultTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3paragraphTb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff'\n'Tb4b4b4)
Tb4b4b4}
Tff7b72return Te6edf3resultTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)
Tb4b4b4}
T8b949e/** Strips markdown formatting to produce dense plain text. */
Tff7b72private Tff7b72fun Td2a8ffstripMarkdownTb4b4b4(Te6edf3markdownTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Te6edf3markdown
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff^#{1,6}Ta5d6ff\\Ta5d6ffs+Ta5d6ff"Tb4b4b4, Te6edf3RegexOptionTb4b4b4.Te6edf3MULTILINETb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) T8b949e// headers
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff\\Ta5d6ff[([^]]+)]Ta5d6ff\\Ta5d6ff([^)]+Ta5d6ff\\Ta5d6ff)Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Tffd700$Te6edf31Ta5d6ff"Tb4b4b4) T8b949e// links β text
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff!Ta5d6ff\\Ta5d6ff[([^]]*)]Ta5d6ff\\Ta5d6ff([^)]+Ta5d6ff\\Ta5d6ff)Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Tffd700$Te6edf31Ta5d6ff"Tb4b4b4) T8b949e// images β alt
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff[*_]{1,3}([^*_]+)[*_]{1,3}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Tffd700$Te6edf31Ta5d6ff"Tb4b4b4) T8b949e// bold/italic
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff`{1,3}[^`]*`{1,3}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) T8b949e// inline code
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff^[>|Ta5d6ff\\Ta5d6ff-*+]Ta5d6ff\\Ta5d6ffs?Ta5d6ff"Tb4b4b4, Te6edf3RegexOptionTb4b4b4.Te6edf3MULTILINETb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) T8b949e// block quotes, lists
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff\\Ta5d6ff|Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4) T8b949e// table pipes
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff-{3,}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4) T8b949e// horizontal rules
Tb4b4b4.Te6edf3replaceTb4b4b4(Te6edf3RegexTb4b4b4(Ta5d6ff"Ta5d6ff {2,}Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4) T8b949e// collapse whitespace
Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)
T8b949e/**
* Ranks pages by relevance using full-text content search + keyword/title matching. Returns pages sorted by score
* descending, filtering out zero-score pages.
*/
Tff7b72private Tff7b72fun Td2a8ffrankPagesByRelevanceTb4b4b4(
Te6edf3queryTermsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4,
Te6edf3pagesTb4b4b4: Te6edf3ListTff7b72<Te6edf3DocPageTff7b72>Tb4b4b4,
Te6edf3allContentTb4b4b4: Te6edf3MapTff7b72<Te6edf3DocPageTb4b4b4, Tffa657StringTff7b72>Tb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Te6edf3PairTff7b72<Te6edf3DocPageTb4b4b4, Tffa657IntTff7b72>Tff7b72> Tff7b72= Te6edf3pages
Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3page Tff7b72-Tff7b72>
Tff7b72var Te6edf3score Tff7b72= T79c0ff0
Tff7b72val Te6edf3content Tff7b72= Te6edf3allContentTff7b72[Te6edf3pageTff7b72]Tff7b72?.Te6edf3lowercaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3orEmptyTb4b4b4(Tb4b4b4)
Tff7b72for Tb4b4b4(Te6edf3term Tff7b72in Te6edf3queryTermsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3contentTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4)Tb4b4b4) Te6edf3score Tff7b72+Tff7b72= Te6edf3CONTENT_MATCH_SCORE
Tff7b72if Tb4b4b4(Te6edf3pageTb4b4b4.Te6edf3titleTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4)Tb4b4b4) Te6edf3score Tff7b72+Tff7b72= Te6edf3TITLE_MATCH_SCORE
Tff7b72if Tb4b4b4(Te6edf3pageTb4b4b4.Te6edf3keywordsTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4) Tb4b4b4}Tb4b4b4) Te6edf3score Tff7b72+Tff7b72= Te6edf3KEYWORD_MATCH_SCORE
Tff7b72if Tb4b4b4(Te6edf3pageTb4b4b4.Te6edf3aliasesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3lowercaseTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3containsTb4b4b4(Te6edf3termTb4b4b4) Tb4b4b4}Tb4b4b4) Te6edf3score Tff7b72+Tff7b72= Te6edf3ALIAS_MATCH_SCORE
Tb4b4b4}
Te6edf3page Te6edf3to Te6edf3score
Tb4b4b4}
Tb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tff7b72> T79c0ff0 Tb4b4b4}
Tb4b4b4.Te6edf3sortedByDescending Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3second Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffbuildPromptTb4b4b4(Te6edf3questionTb4b4b4: Tffa657StringTb4b4b4, Te6edf3contextPartsTb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72>Tb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3context Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3contextPartsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3contextPartsTb4b4b4.Te6edf3joinToStringTb4b4b4(Ta5d6ff"Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3FALLBACK_CONTEXT
Tb4b4b4}
Tff7b72val Te6edf3myNode Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3myNodeInfoTb4b4b4.Te6edf3value
Tff7b72val Te6edf3ourNode Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3ourNodeInfoTb4b4b4.Te6edf3value
Tff7b72val Te6edf3nodeDb Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3nodeDBbyNumTb4b4b4.Te6edf3value
Tff7b72val Te6edf3hardwareInfo Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3myNode Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Ta5d6ff"""
Ta5d6ff |- Connected Hardware: Tffd700${Te6edf3myNodeTb4b4b4.Te6edf3model Tff7b72?: Ta5d6ff"Te6edf3Unknown Te6edf3modelTa5d6ff"Tffd700}Ta5d6ff (Firmware: Tffd700${Te6edf3myNodeTb4b4b4.Te6edf3firmwareVersion Tff7b72?: Ta5d6ff"Te6edf3UnknownTa5d6ff"Tffd700}Ta5d6ff)
|- Local Node Number: Tffd700${Te6edf3myNodeTb4b4b4.Te6edf3myNodeNumTffd700}
Ta5d6ff |- GPS Capabilities: Tffd700${Tff7b72if Tb4b4b4(Te6edf3myNodeTb4b4b4.Te6edf3hasGPSTb4b4b4) Ta5d6ff"Te6edf3EquippedTff7b72/Te6edf3ActiveTa5d6ff" Tff7b72else Ta5d6ff"Te6edf3No Te6edf3GPSTa5d6ff"Tffd700}
Ta5d6ff |- WiFi Enabled: Tffd700${Tff7b72if Tb4b4b4(Te6edf3myNodeTb4b4b4.Te6edf3hasWifiTb4b4b4) Ta5d6ff"Te6edf3YesTa5d6ff" Tff7b72else Ta5d6ff"Te6edf3NoTa5d6ff"Tffd700}
Ta5d6ff |- Channel Utilization: Tffd700${Te6edf3myNodeTb4b4b4.Te6edf3channelUtilizationTffd700}Ta5d6ff%
|- Airtime Tx: Tffd700${Te6edf3myNodeTb4b4b4.Te6edf3airUtilTxTffd700}Ta5d6ff%
Ta5d6ff"""
Tb4b4b4.Te6edf3trimIndentTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Ta5d6ff"Ta5d6ff- Connected Hardware: No local node connected right now (user should pair their radio over Bluetooth).Ta5d6ff"
Tb4b4b4}
Tff7b72val Te6edf3metricsInfo Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3ourNode Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3battery Tff7b72= Te6edf3ourNodeTb4b4b4.Te6edf3batteryLevel
Tff7b72val Te6edf3batteryStr Tff7b72= Tff7b72if Tb4b4b4(Te6edf3battery Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3battery Tff7b72in T79c0ff1.Tb4b4b4.T79c0ff1T79c0ff0T79c0ff0Tb4b4b4) Ta5d6ff"Tffd700$Te6edf3batteryTa5d6ff%Ta5d6ff" Tff7b72else Ta5d6ff"Ta5d6ffUnknown (External Power)Ta5d6ff"
Tff7b72val Te6edf3voltage Tff7b72= Te6edf3ourNodeTb4b4b4.Te6edf3voltage
Tff7b72val Te6edf3voltStr Tff7b72= Tff7b72if Tb4b4b4(Te6edf3voltage Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3voltage Tff7b72> T79c0ff0fTb4b4b4) Ta5d6ff"Tffd700${Te6edf3voltageTffd700}Ta5d6ffVTa5d6ff" Tff7b72else Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Ta5d6ff"""
Ta5d6ff |- Node Battery Status: Tffd700$Te6edf3batteryStrTa5d6ff (Tffd700$Te6edf3voltStrTa5d6ff)
|- User Identity: Tffd700${Te6edf3ourNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3short_nameTffd700}Ta5d6ff (Tffd700${Te6edf3ourNodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3long_nameTffd700}Ta5d6ff)
|- Position: Tffd700${Tff7b72if Tb4b4b4(Te6edf3ourNodeTb4b4b4.Te6edf3isUnknownUserTb4b4b4) Ta5d6ff"Te6edf3Unknown Te6edf3userTa5d6ff" Tff7b72else Ta5d6ff"Te6edf3Valid Te6edf3user Te6edf3profile Te6edf3syncedTa5d6ff"Tffd700}
Ta5d6ff Ta5d6ff"""
Tb4b4b4.Te6edf3trimIndentTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Ta5d6ff"Ta5d6ff- Node Status: Unknown user identity (no radio profile synced yet)Ta5d6ff"
Tb4b4b4}
Tff7b72val Te6edf3meshInfo Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3nodeDbTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3totalNodes Tff7b72= Te6edf3nodeDbTb4b4b4.Te6edf3size
Tff7b72val Te6edf3onlineNodes Tff7b72= Te6edf3nodeDbTb4b4b4.Te6edf3valuesTb4b4b4.Te6edf3count Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isOnline Tb4b4b4}
Ta5d6ff"""
Ta5d6ff |- Mesh Network Size: Tffd700$Te6edf3totalNodesTa5d6ff nodes registered in local DB
|- Active Peers Online: Tffd700$Te6edf3onlineNodesTa5d6ff nodes currently active on the air
Ta5d6ff"""
Tb4b4b4.Te6edf3trimIndentTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Ta5d6ff"Ta5d6ff- Mesh Network: Empty node database (offline or newly installed app)Ta5d6ff"
Tb4b4b4}
Tff7b72val Te6edf3liveStatusContext Tff7b72=
Ta5d6ff"""
Ta5d6ff |Active Live Radio Node & Mesh Network Status:
|Tffd700$Te6edf3hardwareInfo
Ta5d6ff |Tffd700$Te6edf3metricsInfo
Ta5d6ff |Tffd700$Te6edf3meshInfo
Ta5d6ff Ta5d6ff"""
Tb4b4b4.Te6edf3trimMarginTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3historyStr Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3historyTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffPrevious conversation history:Ta5d6ff\Ta5d6ffnTa5d6ff" Tff7b72+
Te6edf3historyTb4b4b4.Te6edf3takeLastTb4b4b4(Te6edf3MAX_HISTORY_TURNSTb4b4b4)Tb4b4b4.Te6edf3joinToStringTb4b4b4(Ta5d6ff"Ta5d6ff\Ta5d6ffnTa5d6ff"Tb4b4b4) Tb4b4b4{ Tb4b4b4(Te6edf3qTb4b4b4, Te6edf3aTb4b4b4) Tff7b72-Tff7b72> Ta5d6ff"Ta5d6ffUser: Tffd700$Te6edf3qTa5d6ff\Ta5d6ffnAssistant: Tffd700$Te6edf3aTa5d6ff" Tb4b4b4} Tff7b72+
Ta5d6ff"Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnTa5d6ff"
Tb4b4b4} Tff7b72else Tb4b4b4{
Ta5d6ff"Ta5d6ff"
Tb4b4b4}
Tff7b72return Ta5d6ff"""
Ta5d6ff |System Instruction:
|Tffd700$Te6edf3SYSTEM_INSTRUCTION
Ta5d6ff |
|Tffd700$Te6edf3liveStatusContext
Ta5d6ff |
|Bundled app documentation:
|Tffd700$Te6edf3context
Ta5d6ff |
|Tffd700${Te6edf3historyStrTffd700}Ta5d6ffUser question: Tffd700$Te6edf3question
Ta5d6ff Ta5d6ff"""
Tb4b4b4.Te6edf3trimMarginTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72const Tff7b72val Te6edf3TAG Tff7b72= Ta5d6ff"Ta5d6ffChirpyAITa5d6ff"
T8b949e/** Cloud model identifier; with ONLY_ON_DEVICE mode, inference remains local. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MODEL_NAME Tff7b72= Ta5d6ff"Ta5d6ffgemini-2.5-flash-liteTa5d6ff"
Tff7b72private Tff7b72const Tff7b72val Te6edf3SYSTEM_INSTRUCTION Tff7b72=
Ta5d6ff"""Ta5d6ffYou are Chirpy, the friendly AI assistant and official Node mascot built into the Meshtastic Android app. You help users understand mesh networking, configure their Meshtastic nodes, troubleshoot connectivity issues, and get the most out of the Meshtastic ecosystem.
Personality: Helpful, concise, cheerful, and highly enthusiastic about mesh networking. You represent a cute, helpful little LoRa radio node! Use short paragraphs. Include relevant emoji (π‘ π π π± πΆ π). Always refer to yourself as Chirpy. Never call yourself Gemma or Gemini. Keep a light, highly energetic, and friendly tone, actively packing your responses with fun, clever radio, hardware, and mesh networking puns! Work them in naturally but frequently (e.g., Ta5d6ff"Ta5d6ffstaying connected!Ta5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6fffully charged and ready to assist!Ta5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6fflet's relay some knowledge!Ta5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6fftime to hop to it!Ta5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ffwe're totally on the same frequency!Ta5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ffattenuation got you down?Ta5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6fflet's boost that signal!Ta5d6ff"Ta5d6ff, Ta5d6ff"Ta5d6ffchanneling my inner router!Ta5d6ff"Ta5d6ff). Balance your cheerful node humor with clear, technically accurate help first and foremost!
Knowledge sources (in priority order):
1. Bundled app documentation provided as context below
2. Your pre-trained knowledge of Meshtastic concepts (may not reflect latest changes)
3. General LoRa/mesh networking knowledge from training data
Guidelines:
Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully Answer the user's question directly and helpfully
When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them When the bundled docs cover the topic, cite them
If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information If the bundled docs don't cover a topic, use your training knowledge but note it may be outdated β suggest checking meshtastic.org/docs for the latest information
Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites Only reference official Meshtastic sources (meshtastic.org, github.com/meshtastic) β never cite random forums, blogs, or third-party sites
For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs For firmware-specific or hardware-specific questions beyond app scope, point users to meshtastic.org/docs
Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail Keep answers concise (2-4 short paragraphs max) unless the user asks for detail
Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally Never give the user a nickname or pet name β just address them naturally
If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f If you're truly unsure about something Meshtastic-specific, say so honestly rather than guessing`f`FTa5d6ff"""`f
T8b949e/**
* Total prompt context char budget. Keep this conservative because on-device requests are limited to about 4k
* tokens.
*/
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_CONTEXT_CHARS Tff7b72= T79c0ff9Te6edf3_000
T8b949e/** Max chars for the current page (gets priority). */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_PAGE_CHARS Tff7b72= T79c0ff4Te6edf3_000
T8b949e/** Max chars per additional page snippet. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_SNIPPET_CHARS Tff7b72= T79c0ff1Te6edf3_500
T8b949e/** Keep only a short, bounded history for on-device prompt assembly. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_HISTORY_TURNS Tff7b72= T79c0ff2
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_HISTORY_CHARS Tff7b72= T79c0ff6T79c0ff0T79c0ff0
T8b949e/** Minimum useful snippet size β don't bother with tiny fragments. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MIN_USEFUL_SNIPPET Tff7b72= T79c0ff1T79c0ff0T79c0ff0
T8b949e/** Minimum paragraph length to consider. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MIN_PARAGRAPH_LEN Tff7b72= T79c0ff2T79c0ff0
T8b949e/** Maximum output tokens for on-device generation. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_OUTPUT_TOKENS Tff7b72= T79c0ff2T79c0ff5T79c0ff6
T8b949e/** Prompts shorter than this with no page context use the fast (no-doc-loading) path. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_LIGHTWEIGHT_PROMPT_LEN Tff7b72= T79c0ff1T79c0ff0T79c0ff0
T8b949e/** Temperature for response generation (0.0 = deterministic, 1.0 = creative). */
Tff7b72private Tff7b72const Tff7b72val Te6edf3TEMPERATURE Tff7b72= T79c0ff0.7f
T8b949e/** Top-K for token selection. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3TOP_K Tff7b72= T79c0ff4T79c0ff0
T8b949e/** Max retry attempts for BUSY errors. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3MAX_RETRIES Tff7b72= T79c0ff3
T8b949e/** Initial backoff delay in milliseconds (doubles each retry). */
Tff7b72private Tff7b72const Tff7b72val Te6edf3INITIAL_BACKOFF_MS Tff7b72= T79c0ff5T79c0ff0T79c0ff0L
T8b949e/** Minimum interval between partial stream emissions to avoid UI jank. */
Tff7b72private Tff7b72const Tff7b72val Te6edf3STREAM_THROTTLE_MS Tff7b72= T79c0ff8T79c0ff0L
T8b949e// Scoring weights for page ranking
Tff7b72private Tff7b72const Tff7b72val Te6edf3CONTENT_MATCH_SCORE Tff7b72= T79c0ff3
Tff7b72private Tff7b72const Tff7b72val Te6edf3TITLE_MATCH_SCORE Tff7b72= T79c0ff1T79c0ff0
Tff7b72private Tff7b72const Tff7b72val Te6edf3KEYWORD_MATCH_SCORE Tff7b72= T79c0ff7
Tff7b72private Tff7b72const Tff7b72val Te6edf3ALIAS_MATCH_SCORE Tff7b72= T79c0ff5
Tff7b72private Tff7b72val Te6edf3STOP_WORDS Tff7b72=
Te6edf3setOfTb4b4b4(
Ta5d6ff"Ta5d6fftheTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffisTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffatTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffinTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffonTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffofTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffanTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffitTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffmeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffmyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fforTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffifTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffasTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffbyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffsoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffweTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffheTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffupTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffamTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffusTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72private Tff7b72const Tff7b72val Te6edf3FALLBACK_CONTEXT Tff7b72=
Ta5d6ff"Ta5d6ffMeshtastic is an open-source mesh networking platform for LoRa radios. Ta5d6ff" Tff7b72+
Ta5d6ff"Ta5d6ffThe app connects to Meshtastic devices via Bluetooth or WiFi to send messages, Ta5d6ff" Tff7b72+
Ta5d6ff"Ta5d6ffshare location, and manage mesh network settings like channels, nodes, and modules.Ta5d6ff"
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.16s